/*
 * timeline.h
 *
 * 读取和写入时间线历史文件的函数。
 *
 * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 * src/include/access/timeline.h
 */
#ifndef TIMELINE_H
#define TIMELINE_H

#include "access/xlogdefs.h"
#include "nodes/pg_list.h"

/*
 * 这些结构的列表描述了服务器的时间线历史。每个 TimeLineHistoryEntry
 * 表示属于历史的一个 WAL，从新到旧。所有在 'begin' 和 'end' 之间的
 * WAL 位置属于由条目表示的时间线。所有条目的 'begin' 和 'end'
 * 指针一起形成一条从时间开始到无穷的连续线。
 */
typedef struct
{
	TimeLineID	tli;
	XLogRecPtr	begin;			/* 包含 */
	XLogRecPtr	end;			/* 排除，InvalidXLogRecPtr 意味着无穷大 */
} TimeLineHistoryEntry;

extern List *readTimeLineHistory(TimeLineID targetTLI);
extern bool existsTimeLineHistory(TimeLineID probeTLI);
extern TimeLineID findNewestTimeLine(TimeLineID startTLI);
extern void writeTimeLineHistory(TimeLineID newTLI, TimeLineID parentTLI,
								 XLogRecPtr switchpoint, char *reason);
extern void writeTimeLineHistoryFile(TimeLineID tli, char *content, int size);
extern void restoreTimeLineHistoryFiles(TimeLineID begin, TimeLineID end);
extern bool tliInHistory(TimeLineID tli, List *expectedTLEs);
extern TimeLineID tliOfPointInHistory(XLogRecPtr ptr, List *history);
extern XLogRecPtr tliSwitchPoint(TimeLineID tli, List *history,
								 TimeLineID *nextTLI);

#endif							/* TIMELINE_H */
